Test automation is critical for assessing and improving the quality of a computer system. However, testing of various hardware components in a computer system traditionally requires certain physical acts to be performed on the hardware components, making such testing processes difficult to automate. For example, to test the behavior of a computer system when a fan is unplugged from the motherboard of the computer system, a human operator may need to perform certain physical acts. That is, the human operator may need to manually open the computer system's chassis, locate the fan on the motherboard and the wires that connect to the fan, and physically pull the wires in order to unplug the fan and proceed with the testing. Also, if the human operator has trouble physically accessing the computer system or interacting with the hardware components of the computer system, then the testing of such hardware components becomes not only time consuming but also limited in coverage.
In addition, conventional automated testing approaches fail to consider certain conditions of a computer system. One example condition may be that a hardware component of the computer system is under development or is unavailable for testing. Another example condition may be that certain errors of the computer system frequently occur when the computer system includes one or more malfunctioning or failing hardware components.